//
//  NWOAuthViewController.swift
//  微博01
//
//  Created by 牛威 on 15/12/8.
//  Copyright © 2015年 牛威. All rights reserved.
//

import UIKit
import SVProgressHUD

class NWOAuthViewController: UIViewController {
    
    
   private lazy var webView = UIWebView()
    
    
    
    //MARK: - 关闭webView
    
  @objc  private func close(){
    
        SVProgressHUD.dismiss()
    
    
        dismissViewControllerAnimated(true, completion: nil)
    
    }
    
    //MARK: - 自动填充 web注入 以代码的形式向web页面添加内容 yohtr35601@163.com qw1987
    @objc private func autoFill(){
    
        let js = "document.getElementById('userId').value = '81683367@qq.com';" + "document.getElementById('passwd').value = 'venn123';"
    
    webView.stringByEvaluatingJavaScriptFromString(js)
    
    }
    
    
    override func loadView() {
        
        view = webView
        
        //设置代理监听网络响应
        
        webView.delegate = self
        
        //设置导航栏
        
        title = "登录新浪微博"
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "关闭", style: .Plain, target: self, action: "close")
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: .Plain, target: self, action: "autoFill")
        
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //在使用代码modal控制器的时候 为了不影响渲染效果应该设置背景色

        
//        view.backgroundColor = UIColor.whiteColor()
        
        //加载页面
        
        let request = NSURLRequest(URL: NetTools.shared.oauthURL)
        
        webView.loadRequest(request)
        
        
        
    }

}


//MARK: - 实现代理方法UIWebViewDelegate

extension NWOAuthViewController: UIWebViewDelegate {
    
    
    
    func webViewDidStartLoad(webView: UIWebView) {
        
        //开始转菊花
        
        
        SVProgressHUD.show()
    }
    
    func webViewDidFinishLoad(webView: UIWebView) {
        
        //停止转菊花
        
        
        SVProgressHUD.dismiss()
    }

    
     //通常ios的代理方法中,返回值是bool,一般情况是返回true可以正常工作,返回false不能正常工作
    
    /// 将要加载请求时调用的代理方法


    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        
        //判断主机地址是否是百度
        
        guard let url = request.URL where url.host == "www.baidu.com" else {
        
            
//            print("不加载百度")
            
            return true
        
        }
        
        //从url中 code=是否存在
        
        guard let query = url.query where query.hasPrefix("code=") else {
        
//            print("取消授权")
            
            self.close()
        
            return true
        
        }
        
        
        
        //提取code
        
        let code = query.substringFromIndex("code=".endIndex)
//        print("这是授权码 \(code)")
        
//         print(url.host)
        
//        print(url.query)
        
        
        //如果一个控制器的业务逻辑非常多,那就多建立几个视图模型分担任务
        
        //调用视图模型中的方法加载token
        
        UserAccountViewModel.sharedAccount.loadAccessToken(code) { (isSuccessed) -> () in
            
            if !isSuccessed {
                
                
                SVProgressHUD.showErrorWithStatus("您的网络不给力")
                
                //延迟2s之后关闭控制器
                //尾随闭包 在最后一个参数的末尾加括号,把最后一个括号去了 把参数删了 把void -> in去了
                delay(2) {
                    
                    self.close()
                }
                
                
                print("失败了")
            
            }
            
            
            print("成功了")
            
//            print(UserAccountViewModel.sharedAccount.account)
            
            //发送通知切换到主界面
            
            //发送完之后应该关闭webView页面 调用这个方法之后不会将控制器立即销毁
            
           self.dismissViewControllerAnimated(false, completion: { () -> Void in
            
            //这里一定要停止指示器 要不然在视图中不会消失 这里一定要切记
            
            SVProgressHUD.dismiss()
            
            
            //通知中心是同步的,一旦发送通知会先执行监听方法 直接结束后才执行后续代码
            //这句通知代码放到闭包里 就是说销毁完控制器再执行通知 这样就不会出现多web界面销毁不掉的情况了
            
                NSNotificationCenter.defaultCenter().postNotificationName(WBChangeRootViewControllerNotification, object: "welcome")
            

            })
            

        }
         return false
        
    }
    
    
}


